package com.qf.dao.factory;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

/**
 *
 *
 * dom4j:解析 xml
 * 创建者: QF-SUN
 * 创建时间: 2023/4/15 14:40
 * 描述: 由此工厂对象为我们管理所有的对象，需要时直接从工厂中获取
 *
 * 思路：
 *  1. 把需要管理的对象都存储到属性文件中
 *  2. 通过工厂，加载属性文件
 *  3. 把所有的对象都创建出来，然后存储到 容器中
 *  4. 当需要对象时， 从容器中直接获取
 *
 */
public class BeanFactory {

    private static final Map<String,Object> map = new HashMap<String,Object>();

    static {
        InputStream is = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");

        Properties properties  = new Properties();
        try {
            properties.load(is);
            //获取键集合
            Set<Object> keys = properties.keySet();
            for (Object key : keys) {
//                System.out.println("key:" + key);
//                System.out.println("value:" + properties.get(key));
                String value = (String) properties.get(key);

                //获取类对象（字节码）
                Class clazz = Class.forName(value);
                //通过反射创建对象
                Object obj = clazz.newInstance();

                map.put((String) key, obj);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     *
     * @param name
     * @return
     */
    public static Object getBean(String name) {
        return map.get(name);
    }

    public static void main(String[] args) {
        Object userDao = getBean("userService");
        System.out.println(userDao);
    }
}
